nginx 没有 apache自动切割的工具,只有写脚本,也可以借助 centos 自带的日志归档工具 logrotate 。
1.nginx 日志切割脚本
首先确定访问日志路径,假定为 /tmp/axxess.log ,还要确定 nginx 的 pid 文件所在路径,假定为 /usr/local/nginx/var/nginx.pid。下面开始写日志
|
|
d=data -d "-1 day" +%F
表示时间,切割前一天的日志;
[ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log 判断归档目录存在不存在,存在就进行下一步,不存在就创建;
mv /tmp/access.log /tmp/nginx_log/$d.log 把日志移动到归档目录,文件名$d根据时创建;
/etc/init.d/nginx reload > /dev/null 移动日志以后需要重新创建access.log 重新加载 nginx 就可以,然后把重新加载的输出日志重定向到 /dec/null;
cd /tmp/nginx_log/ 进入归档目录;
cd /tmp/nginx_log/ 如果日志比较大,压缩归档文件方便保存,-f 表示强制覆盖。
最后写一个计划任务,每天0点0分执行脚本。
|
|
2.借助系统的 logrotate 工具实现
|
|
加入内容:
|
|
说明:
- daily 表示日志按天归档;
- missingok 表示忽略所有错误,比如日志文件不存在的情况下;
- rotate 52 表示存放的日志个数,最多就52个,最老的会被删除;
- compress 表示日志要压缩;
- delaycopress 表示压缩除了当前和最近之外的所有其他版本;
- notifempty 表示如果日志为空,则不归档;
- create 644 nobody nobody 定义归档日志的权限以及属主和属组;
- sharedscripts 表示所有的日志共享该脚本,因为这里指定的日志文件为多个,用来*.log;
- portrotate 后边跟轮换过日志之后要运行的命令;
- endscript 表示结束了。